#ifndef _SPINLOCK_H_
#define _SPINLOCK_H_

#include "riscv.h"
#include "types.h"

// 自旋锁结构体定义
typedef struct spinlock {
    volatile uint8 locked;   // 锁状态：0=未锁，1=已锁 
    char *name;              // 锁的名称，用于调试
} spinlock_t;

// 静态初始化自旋锁的宏 
#define SPIN_LOCK_INITIALIZER { 0, 0 }

// 初始化自旋锁的函数
void initlock(spinlock_t *lock, char *name);

// 获取自旋锁
void spin_lock(spinlock_t *lock);

// 尝试获取自旋锁（非阻塞），成功获取返回0，否则返回1
int spin_trylock(spinlock_t *lock);

// 释放自旋锁
void spin_unlock(spinlock_t *lock);

// 兼容性函数名
void acquire(spinlock_t *lock);
void release(spinlock_t *lock);

#endif // _SPINLOCK_H_